//
//  Node.h
//  iFlickr
//
//  Created by 张 霄鹤 on 09-7-5.
//  Copyright 2009 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>

#define NONE_NODE 0;
#define DOCUMENT_NODE 1
#define ELEMENT_NODE 2
#define TEXT_NODE 3

@interface Node : NSObject {
	/**
	 * 保存 Child 元素
	 */
	NSMutableArray *childs;
	/**
	 * 父节点
	 */
	Node *parent;
}

@property(nonatomic, retain) Node *parent;

/**
 * 初始化
 */
- (id)init;

/**
 * 获取节点名称，所有继承自该类的类，都要定义方法，来重载
 */
- (NSString *)getNodeName;

/**
 * 添加子节点
 * @param child 子节点
 * @return ok 是否成功，当当前节点不允许添加指定的子节点时返回 NO
 */
- (BOOL)appendChild:(Node *)child;

/**
 * 返回节点类型
 */
- (NSInteger)nodeType;

/**
 * 获取属性
 */
- (NSDictionary *)getAttributes;

/**
 * 获取第一个子节点
 */
- (Node *)getFirstChild;

/**
 * 获取最后一个子节点
 */
- (Node *)getLastChild;

/**
 * 获取前一个和自己在平级关系上的节点
 */
- (Node *)getPreviousSibling;

/**
 * 获取后一个和自己在平级关系上的节点
 */
- (Node *)getNextSibling;

/**
 * 获取当前子节点的列表
 */
- (NSArray *)getChildNodes;

/**
 * 释放成员
 */
- (void)dealloc;

@end
